How can I add Javascript in the header of all post pages and only post pages

Check the type of the queried object on the page and the post type:

function function_that_returns_js_string() {
  $obj = get_queried_object();
  $type = is_a($obj,'WP_Post');
  if (true === $type && 'post' == $obj->post_type) {
    echo 'your string';
  }
}
add_action('wp_head', 'function_that_returns_js_string');

However, I am concerned that you are inserting a script directly into the head of the page rather than enqueueing it, which is more standard practice. The same trick will work to conditionally enqueue:

function function_that_returns_js_string() {
  $obj = get_queried_object();
  $type = is_a($obj,'WP_Post');
  if (true === $type && 'post' == $obj->post_type) {
    wp_enqueue_script('jcrop');
  }
}
add_action('wp_enqueue_scripts', 'function_that_returns_js_string');